<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        /*
            单例模式： 一个构造函数在当前环境中只允许存在一个实例对象，即每次new出来的实例对象其实都是相同的。
            使用场景： 自定义弹框 定义一个弹窗构造函数，每次调用都会创造一个弹窗对象，但是所有的弹窗对象都是同一个实例。
        */

        // 下面是单例模式的一段核心代码
        let instance = null; // 作为flag判断当前是否需要new一个新的实例对象出来
        function Perosn() {
            this.name = 'zhangsan'
        }
        // 创建实例对象的方法
        function singleTon() {
            if (!instance) instance = new Perosn();
            return instance;
        }

        const p1 = singleTon();
        const p2 = singleTon();
        console.log(p1, p2);
        // 此时返回true 说明只创建了一个实例对象
        console.log(p1 === p2);
    </script>
</body>

</html>